﻿#define _CRT_SECURE_NO_WARNINGS
//作者：爱吃糖的boy
#include<stdio.h>
#define NDEBUG  //如果已经确认程序没有问题，不需要再做断言，就在 #include <assert.h> 语句的前⾯，定义⼀个宏 NDEBUG 。
#include<assert.h>
//int main()
//{
//	// assert断言
//	int a = 10;
//	int* p = &a;
//	//....
//	//....
//	p = NULL;
//	//....
//	//....
//	assert(p!= NULL);  //Assertion failed: p!= NULL, file E:\Ccode\c-learn\test_11_19\test_11_19\test.cpp, line 15
//	printf("%d ",*p);
//	return 0;
//
//}

////指针的使⽤和传址调⽤
////size_t == unsight int
//size_t my_strlen(const char* str) //限制指针
//{
//	assert(str!= NULL);
//	int count = 0;
//	assert(str);
//	while (*str)
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//int main()
//{
//	int len = my_strlen("abcdef");
//	printf("%d\n", len);
//	return 0;
//}

//void Swap1(int x, int y)
//{
//	int tmp = x;
//	x = y;
//	y = tmp;
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	printf("交换前：a=%d b=%d\n", a, b);
//	Swap1(a, b);
//	printf("交换后：a=%d b=%d\n", a, b);
//	return 0;
//}

//void Swap2(int* px, int* py)  //这种函数调⽤⽅式叫：传址调⽤。
//{
//	int tmp = 0;
//	tmp = *px;
//	*px = *py;
//	*py = tmp;
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	printf("交换前：a=%d b=%d\n", a, b);
//	Swap2(&a, &b);
//	printf("交换后：a=%d b=%d\n", a, b);
//	return 0;
//}

//int main()
//{
//	int arr[10] = {0};
//	int* p = arr;
//	int* pc = &arr[0];
//	p == pc;  //ture
//
//	printf("%p\n",&arr);  //整个数组的地址
//	printf("%p\n",&arr+1);  //+40
//
//
//	return 0;
//
//}

//int main()
//{
//	//使⽤指针访问数组
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	//输⼊
//	int* p = arr;
//	for (int i = 0; i < sz; i++)
//	{
//		scanf("%d", p + i);
//		//scanf("%d", arr+i);//也可以这样写
//	}
//	//输出
//	for (int i = 0; i < sz; i++)
//	{
//		//printf("%d ", *(p + i));
//		//printf("%d ", *(arr + i));
//		printf("%d ", p[i]);
//		//printf("%d ", i[arr]);
//		//printf("%d ", i[p]);
//		//printf("%d ", arr[i]);
//	}
//	return 0;
//
//}

// ⼀维数组传参的本质
void test(int arr[]) //int* arr
{
	int sz2 = sizeof(arr) / sizeof(arr[0]);  //数组传参，传递的是数组首元素的地址
	printf("sz2 = %d\n", sz2);
}
void Print(int * arr,int sz) 
{
	for (int i = 0; i < sz; i++)
	{
		printf("%d ",i[arr]);
	}
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz1 = sizeof(arr) / sizeof(arr[0]);
	printf("sz1 = %d\n", sz1);
	test(arr);
	Print(arr,sz1);    //这里数组名是首元素地址
	//数组传参---降级
	return 0;
}


